const jwtUtils = require('../utils/jwtUtils')

module.exports = async (req, res, next) => {
  // 获取用户传递过来的token
  const token = req.headers.authorization

  // token缺失
  if (!token) {
    return res.status(401).json({ message: 'token缺失' })
  }

  // token格式不正确
  if (!token.startsWith('Bearer ')) {
    return res.status(401).json({ message: 'token格式不正确，请重新登录' })
  }

  // 去除token前缀，获取真正的token
  const realToken = token.split(' ')[1]

  try {
    // 验证token，使用await等待验证完成，并且捕获相关错误
    const decoded = await jwtUtils.checkToken(realToken)
    req.user = decoded
    next()
  } catch (error) {
    // 处理token过期的情况
    if (error.name === 'TokenExpiredError') {
      return res.status(401).json({ message: 'token已经过期，请重新登录' })
    }

    return res.status(403).json({ message: '无效的token' })
  }
}